/*
 * Projeto Casamento
 * 
 * Versao: 0.0.1
 * Autor: Cristiano Lima
 * Data: 28/02/2013
 * 
 * Copyright (C) 2012-2013
 */
package casamento.controle;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.component.UIComponent;
import javax.faces.component.UIInput;
import javax.faces.context.FacesContext;

import org.primefaces.event.CellEditEvent;

import casamento.Bean.TipoEstabelecimento;
import casamento.DAO.SegmentoDAO;
import casamento.util.Validar;


@ManagedBean
@RequestScoped
public class SegmentoMB {
	
	TipoEstabelecimento segmento = new TipoEstabelecimento();
	SegmentoDAO dao = new SegmentoDAO();
	List<TipoEstabelecimento> listaSegmento = new ArrayList<TipoEstabelecimento>();
	TipoEstabelecimento mostrarSegmento = new TipoEstabelecimento();
	
	/**
	 * Construtor
	 */
	public SegmentoMB(){
		listarSegmento();
	}
	
	/**
	 * Método resposável por iserir um segmento na TbTipoSegmento
	 */
	public void inserirSegmento(){
		
		boolean verifica;
		Validar valida = new Validar();
		verifica = valida.validarSegmento(segmento);
		
		if(verifica == true){
			dao.inserir(segmento);
			
			FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO,
					"Segmento Cadastrado com Sucesso.",
					"");
			FacesContext.getCurrentInstance().addMessage(null, message);
			listarSegmento();
			
		}else{
			FacesMessage message = new FacesMessage(
					FacesMessage.SEVERITY_ERROR,
					"Há campos obrigatórios a serem preenchidos.",
					"");
			FacesContext.getCurrentInstance().addMessage(null, message);
		}
	
	}

	/**
	 * Método resposável por alterar um segmento na TbTipoSegmento
	 * @throws SQLException 
	 * @throws ClassNotFoundException 
	 */
	public void alterarSegmento(CellEditEvent event) throws ClassNotFoundException, SQLException{
		
		 Object oldValue = event.getOldValue();  
	     Object newValue = event.getNewValue();  
		
		UIComponent form = (UIComponent) event.getColumn();
		UIComponent component = event.getComponent();
		UIInput input= (UIInput) component.findComponent("hiddenId");
		
		Integer id = (Integer) input.getValue();
		String valor = (String) event.getNewValue();
		dao.alterarSegmento(form.getId(), valor, id);
		
		  if(newValue != null && !newValue.equals(oldValue)) {  
		        FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Valor alterado com sucesso.", "Valor antigo: " + oldValue + ", Novo Valor:" + newValue);  
		        FacesContext.getCurrentInstance().addMessage(null, msg);  
		    }  
	}
	
	/**
	 * Método responsável pela troca de abas, neste momento limpa o objeto.
	 *
	 */
	public String abaSegmento(){
		segmento = new TipoEstabelecimento();
		return "../cadastro/segmento/cadastroSegmento.xhtml?faces-redirect=true";
	}
	
	/**
	 * Método responsável por listar todos os segmentos.
	 * 
	 */
	public void listarSegmento(){
		
		listaSegmento = dao.listaTipoSegmento();
	}
	
	/**
	 * Getter para segmento.
	 *
	 * @return segmento
	 */
	public TipoEstabelecimento getSegmento() {
		return segmento;
	}
	
	/**
	 * Setter para segmento.
	 *
	 * @param segmento segmento
	 */
	public void setSegmento(TipoEstabelecimento segmento) {
		this.segmento = segmento;
	}
	
	/**
	 * Getter para listaSegmento.
	 *
	 * @return listaSegmento
	 */
	public List<TipoEstabelecimento> getListaSegmento() {
		return listaSegmento;
	}
	
	/**
	 * Setter para listaSegmento.
	 *
	 * @param listaSegmento listaSegmento
	 */
	public void setListaSegmento(List<TipoEstabelecimento> listaSegmento) {
		this.listaSegmento = listaSegmento;
	}
	
	/**
	 * Getter para mostrarSegmento.
	 *
	 * @return mostrarSegmento
	 */
	public TipoEstabelecimento getMostrarSegmento() {
		return mostrarSegmento;
	}
	
	/**
	 * Setter para mostrarSegmento.
	 *
	 * @param mostrarSegmento mostrarSegmento
	 */
	public void setMostrarSegmento(TipoEstabelecimento mostrarSegmento) {
		this.mostrarSegmento = mostrarSegmento;
	}
	
}
